package guigu.Map;

import org.junit.Test;

import java.util.*;

/**
 *  Map中的常用方法测试
 *    总结：常用方法
 *    增：put(Object key,Object value)
 *    删：remove(bject key)
 *    改：put(Object key,Object value)
 *    查：get(Object key)
 *    长度：size()
 *    遍历：keySet() / value() / entrySet() / 方式二
 */
public class MapMethod {
    /*
       元视图操作的方法：遍历操作
       Set keySet()://返回所有key构成的Set集合
       Collection values()://返回所有value构成的Collection集合
       Set entrySet()://返回所有key-value对构成的Set集合
     */
    @Test
    public void test3()
    {
        Map map = new HashMap();
        map.put(15,136);
        map.put("AA",124);
        map.put("BB",12);
        map.put(45,1245);
        map.put("DD",14);
        //遍历所有的key集:keySet()
        Set set = map.keySet();
        Iterator iterator = set.iterator();
        while (iterator.hasNext())
        {
            System.out.println(iterator.next());
        }
        System.out.println();
        //遍历所有的value集：value()
        Collection values = map.values();
        for(Object obj:values)
        {
            System.out.println(obj);
        }
        System.out.println();
        //方式一：遍历所有的key-value:entrySet()
        Set set1 = map.entrySet();
        Iterator iterator1 = set1.iterator();
        while (iterator1.hasNext())
        {
            Object obj = iterator1.next();
            //entrySet集合中的元素都是entry
            Map.Entry entry = (Map.Entry)obj;
            System.out.println(entry.getKey()+"---->"+entry.getValue());
        }
        System.out.println();
        //方式二：遍历所有的key-value
       Set set2 =  map.keySet();
        Iterator iterator2 = set2.iterator();
        while (iterator2.hasNext())
        {
            Object key = iterator2.next();
            Object value = map.get(key);
            System.out.println(key+"======"+value);

        }
    }






    /*
       元素查询的操作：
       Object get(Object key)://获取指定Key对应的value
       boolean containsKey(Object key)://是否包含指定的Key
       boolean containsValue(Object value)：//是否包含指定的value
       int size()://返回map中key-value对的个数
       boolean isEmpty()://判断当前map是否为空
       boolean equals(Object obj)://判断当前map和参数对象obj是否相等
     */
    @Test
    public void test2()
    {
        Map map = new HashMap();
        map.put(15,136);
        map.put("AA",124);
        map.put("BB",12);
        map.put(45,1245);
        map.put("DD",14);
        //Object get(Object key)://获取指定Key对应的value
        Object o = map.get(15);
        System.out.println(o);
        //boolean containsKey(Object key)://是否包含指定的Key
        //boolean containsValue(Object value)：//是否包含指定的value
        boolean bb = map.containsKey("BB");
        System.out.println(bb);
        boolean b = map.containsValue(14);
        System.out.println(b);

    }





    /*
       添加、删除、修改操作
       Object put(Object key,Object value)://将指定的key-value添加到(或修改)当前map对象中
       void putAll(Map m)://将m中的所有key-value对存放到当前map中
       Object remove(bject key)://移除指定key的key-value对，并返回value
       void clear():清空当前map中的所有数据
     */
    @Test
    public void test1()
    {
        Map map = new HashMap();
        //添加
        map.put(15,136);
        map.put("AA",124);
        map.put("BB",12);
        map.put(45,1245);
        map.put("DD",14);
        //修改
        map.put("AA",132);
        System.out.println(map);
        //void putAll(Map m)://将m中的所有key-value对存放到当前map中
        Map map1 = new HashMap();
        map1.put("CC",1);
        map1.put("NN",14);
        map.putAll(map1);
        System.out.println(map);
        // Object remove(bject key)://移除指定key的key-value对，并返回value
        Object aa = map.remove("AA");
        System.out.println(aa);
        System.out.println(map);
    }
}
